--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / databaseHealthWarning.js
Displaying Raw • Download
meshchatx/src/frontend/js/databaseHealthWarning.js HEAD (96b397dc) Text, 2.02 KB
T8b949e// SPDX-License-Identifier: 0BSD
T8b949e/**
* Session-scoped database health toast gating.
*
* /api/v1/app/info is polled about every 15s. database_health_issues stay set
* for the whole process after open, so showing a toast on every poll spams.
* Show once per issue fingerprint per session. Identity switch resets.
*/
Tff7b72export Tff7b72const Te6edf3DATABASE_HEALTH_TOAST_KEY Tff7b72= Ta5d6ff"database-health-warning"Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3DATABASE_HEALTH_TOAST_DURATION_MS Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3DATABASE_HEALTH_FALLBACK_MESSAGE Tff7b72= Ta5d6ff"Database issue detected. Check About > Database."Tb4b4b4;
Tff7b72let Te6edf3lastFingerprint Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72export Tff7b72function Te6edf3resetDatabaseHealthWarningStateTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3lastFingerprint Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}
Tff7b72export Tff7b72function Te6edf3resetDatabaseHealthWarningStateForTestsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3lastFingerprint Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {unknown} issues
* @returns {string}
*/
Tff7b72export Tff7b72function Te6edf3fingerprintDatabaseHealthIssuesTb4b4b4(Te6edf3issuesTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3issuesTb4b4b4) Tff7b72|| Te6edf3issuesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff""Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3parts Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3item Tff7b72of Te6edf3issuesTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3item Tff7b72!== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Tff7b72continueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3trimmed Tff7b72= Te6edf3itemTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3trimmedTb4b4b4) Tb4b4b4{
Te6edf3partsTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3trimmedTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3partsTb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff"\n"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {unknown} issues
* @param {{ warning: (message: string, duration?: number, key?: string | null) => void }} toastUtils
* @returns {boolean} true when a toast was shown
*/
Tff7b72export Tff7b72function Te6edf3showDatabaseHealthIssuesToastIfNeededTb4b4b4(Te6edf3issuesTb4b4b4, Te6edf3toastUtilsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3fingerprint Tff7b72= Te6edf3fingerprintDatabaseHealthIssuesTb4b4b4(Te6edf3issuesTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3fingerprintTb4b4b4) Tb4b4b4{
Te6edf3lastFingerprint Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3fingerprint Tff7b72=== Te6edf3lastFingerprintTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3toastUtils Tff7b72|| Tff7b72typeof Te6edf3toastUtilsTb4b4b4.Te6edf3warning Tff7b72!== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3message Tff7b72= Te6edf3fingerprintTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/\n/gTb4b4b4, Ta5d6ff" "Tb4b4b4) Tff7b72|| Te6edf3DATABASE_HEALTH_FALLBACK_MESSAGETb4b4b4;
Te6edf3toastUtilsTb4b4b4.Te6edf3warningTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3DATABASE_HEALTH_TOAST_DURATION_MSTb4b4b4, Te6edf3DATABASE_HEALTH_TOAST_KEYTb4b4b4)Tb4b4b4;
Te6edf3lastFingerprint Tff7b72= Te6edf3fingerprintTb4b4b4;
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────